package com.example.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * 实现密码的加盐加密处理
 */
public class PasswordUtils {
    public static String encrypt(String password) {
        // 生成盐值
        String salt = UUID.randomUUID().toString().replaceAll("-", "");
        // 加盐处理 （盐值 + （md5（盐值 + password）） - 最终密码） - 存储数据密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        String dbPassword = salt + '$' + finalPassword;
        return dbPassword;
    }

    // 加盐密码的验证
    public static boolean dencreypt(String password, String dbPassword) {
        // 验证参数
        if (!StringUtils.hasLength(password) || !StringUtils.hasLength(dbPassword)
                || dbPassword.length() != 65 || dbPassword.contains("$")) {
            return false;
        }
        // 获取盐值  根据 $ 进行分割
        String[] dbPasswordArray = dbPassword.split("\\$");
        String salt = dbPasswordArray[0];
        String finalPassword = dbPasswordArray[1];
        // 进行密码加盐验证
        String userPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        if (userPassword.equals(finalPassword)) {
            return true;
        }
        return false;
    }
}
